// js中的数组
const arr = [1, 2, 3, "i"]

// ts中的数组
// 写法1
const arr1: number[] = [1, 2]

arr1.push(1, 2, 3)

// 写法2（泛型）
const arr2: Array<number> = [1, 2]


//练习1； 获取一个数组，数组中存放IPerson类型的对象
interface IPerson {
    name: string;
}

let p: IPerson = { name: "pp" }
const arr3: IPerson[] = []
// typescript里面的类型是所谓的鸭子类型
arr3.push({ name: "aa" })

const arr4: Array<IPerson> = []

// 练习2 ,有一个数组，既可以是string有可以是number
const arr5: (number | string)[] = [1, "q"]

const arr6: Array<number | string> = ["d", 3]


// 用接口表示数组
interface IArray {
    [index: number]: number
}

const arr7: IArray = [1, 2, 3, 4]

// 用接口描述伪数组
interface IArrayLike {
    [index: number]: number,
    length: number,
    callee: Function //表示指向到 IArrayLike对象的函数
}

function fn() {
    console.log(arguments);
    let arg: IArrayLike = arguments;
    let arg1: IArguments = arguments;//官方
}

// 声明数组时any的作用
const arr8: any[] = [1, 2, () => { }]
const arr9: Array<any> = [1, 2, "s"]

// 一种特殊的数组，元组(tuple),#F,python中有元组
// 初始化变量时，赋值一个数组，数组里面的成员类型必须和声明的类型一致
const tuple: [string, number] = ["hello", 2]
console.log(tuple[0]);
tuple[1] = 20

// 追加额外内容时，追加内容类型必须匹配原有的类型中的一种
tuple.push(4, "a")
export default null




